/**
 * @info JQuery插件
 * @use url="/xx.do"返回的是List<Map<K,V>> JSON数据Map必须有两个值<"CODE",1000><"NAME",北京>
 * @use 	param的第二个ID是页面对应inputID的显示下拉ID，但是必须隐藏一个input使其ID等于第二个inputID连接"Value"，这个是code的值
 * @like	var url3=path+"/a.do";
    		$("#inputId").autoText({
				url : url3,
				param:["后台接收参数名字","前台页面取值input的ID并且是显示下拉数据的ID","第二个参数名","第二个参数取值的inputID"]
			});
*/
$.ajaxSetup({
  contentType: "application/x-www-form-urlencoded; charset=utf-8"
});

!function($) {
	//高亮的索引  
	var highLightIndex = -1;
	// 超时的标识（对用户连续快速按下键盘的事件做延时处理，只对用户在500ms内最后一次请求，让其生效）
	var timeoutId = null;
	var timer=null;
	
	$.fn.autoText = function(options) {
		var url=options.url;
		var param=options.param;
		var divID="autoText_"+param[1];
		var width = this.width() + 30;
		var height = this.height();
		var pos = $(this.selector).position();//this.position();
		var left = pos.left;
		var top = pos.top + height + 18;
		var style = "width: "
				+ width
				+ "px;left:"
				+ left
				+ "px;top:"
				+ top
				+ "px;overflow: auto;position: absolute;text-align: left;border: 1px gray solid;background-color: white;z-index: 9999;padding-left:5px;height: 181px;color:black;";
		var div = "<div tabindex='0' id='"+divID+"' style='"+style+"'></div>";
		// 在元素后面追加div 并让其隐藏
		this.after(div);
		$("#"+divID).hide();
		var id=this.selector;
		
		//表单焦点点击的时候，加载
		$(id).bind('click',function(e){
			$(id).val("");
			$(id+"Value").val("");
			// 判断父级依赖项必须赋值
			var dependName = options.dependName;
			if(dependName && $("#"+dependName).val() == ''){
				if(dependName == 'provName'){
					alert('请选择省份.');
					$("#"+dependName).focus();
					return;
				}
				if(dependName == 'cityName'){
					alert('请选择地市.');
					$("#"+dependName).focus();
					return;
				}
			}
			//解决-当选择了市或县然后重新选，省和市时，市县对不
			if(id == "#provName"){
				var obj_city = jQuery('#cityName');
				var obj_area = jQuery('#areaName');
				if (obj_city.length > 0){
					obj_city.val('');
					$("#cityNameValue").val('');
				}
				if (obj_area.length > 0){
					obj_area.val('');
					$("#areaNameValue").val('');
				}
			}else if(id == "#cityName"){
				var obj_area = jQuery('#areaName');
				if (obj_area.length > 0){
					obj_area.val('');
					$("#areaNameValue").val('');
				}
			}

			// 如果父级为'国家总局',默认不显示
			if(dependName && $("#"+dependName).val() == '000000'){
				return;
			}

			// ---------------监管机构特殊处理判断（开始）
			// 下拉框 - 地市
			var obj_area = jQuery('#cityName');
			if (obj_area.length > 0){
				var obj_superviseFlag = jQuery('#superviseFlag');
				if (obj_superviseFlag.length > 0){
					// 监管机构的区县下拉框,如果地市选择的是国家局,则不予显示区县
					var prov_code = $("#provNameValue").val();
					if(prov_code == '000000'){
						return;
					}
				}
			}	

			// 下拉框 - 区县
			var obj_area = jQuery('#areaName');
			if (obj_area.length > 0){
				var obj_superviseFlag = jQuery('#superviseFlag');
				if (obj_superviseFlag.length > 0){
					// 监管机构的区县下拉框,如果地市选择的是省局（比较特殊）,则不予显示区县
					var city_code = $("#cityNameValue").val();
					var city_code_sub = city_code.substring(2,6);
					if(city_code_sub == '0000'){
						// 父级编码（地市）后四位为0，说明父级编码下拉框选择的是省局
						return;
					}
				}
			}

			// ---------------监管机构特殊处理判断（结束）


			//关闭所有
			$.each($("[id^=autoText_]"),function(i,d){
				$(d).hide();
			});
			// 清除其它下拉
			clearTimeout(timeoutId);
			var params="?";
			var postParams = {};
			for(var i=0;i<param.length;i+=2){
				var k=param[i];
				var v = $.trim($("#"+param[i+1]).val());
				if(v!=''&&v!=null&& v != "null")
					params+=k+"="+v+"&";
				postParams[k] = v;
			}
			
			var req_url = '';
			//chewl修改 可以直接在url上放Json数据
			if(typeof(url) == "string"){
				req_url = url+params;
			}else{
				req_url = url;
			}
			
			//timeoutId = setTimeout(processAjaxRequest(id,req_url,divID), 100);
			// 加载下拉div
			timeoutId = setTimeout(function(){processAjaxRequest(id,req_url,postParams,divID);}, 100);
		});
		
		//隐藏，鼠标所在的input鼠标移走的时候，取值隐藏 mouseout
		 $(id).bind('blur',function(e){
        	var cxs=$("#"+divID).find("div > span.icon-check");
        	var str="";
        	var codes="";
        	// 因为制剂规格含特殊符号所以改为"-@-"来分割多个值
        	if(param[1] == "prepnSpec") {
				$.each(cxs,function(i,d){
					str+=$(d).parent().text()+" ";
					codes+=$(this).parent().find("input").val()+"-@-";
				});
			} else {
				$.each(cxs,function(i,d){
					str+=$(d).parent().text()+" ";
					codes+=$(this).parent().find("input").val()+",";
				});
			}
        	$("#"+param[1]).val(str);
        	$("#"+param[1]+"Value").val(codes);
			//延迟影藏
			timer=setTimeout(function(){
				$("#"+divID).hide();
			},900);
		});
		
		//滚动的时候
		$("#"+divID).scroll(function(e){
			clearTimeout(timer);
		});
		
		//鼠标移动来的时候清除事件
		$("#"+divID).bind('mouseover',function(e){
			clearTimeout(timer);
		});
		
		//区域显示的DIV鼠标移走的时候，取值，隐藏
		$("#"+divID).bind('blur',function(e){
			var cxs=$("#"+divID).find("div > span.icon-check");
			var str="";
			var codes = "";
			// 因为制剂规格含特殊符号所以改为"-@-"来分割多个值
			if(param[1] == "prepnSpec") {
				$.each(cxs,function(i,d){
					str+=$(d).parent().text()+" ";
					codes+=$(this).parent().find("input").val()+"-@-";
				});
			} else {
				$.each(cxs,function(i,d){
					str+=$(d).parent().text()+" ";
					codes+=$(this).parent().find("input").val()+",";
				});
			}
			$("#"+param[1]).val(str);
			$("#"+param[1]+"Value").val(codes);
			cxs.removeClass("icon-check");
			$("#"+divID).hide();
		});
		
		//处理事件，键盘事件
		this.keyup(function(event){
			if(typeof(url) != "string"){
				return;
			}
			var myEvent = event || window.event;
			var keyCode = myEvent.keyCode;
			// 输入是字母，或者退格键则需要重新请求
			if ((keyCode >= 48 && keyCode <= 57) 
					|| (keyCode >= 65 && keyCode <= 90)
					|| keyCode == 32|| keyCode == 8) {
				clearTimeout(timeoutId);
				//处理参数，数组k,vId,k,vId
				var params="?";
				var postParams = {};
				for(var i=0;i<param.length;i+=2){
					var k=param[i];
					var v = $.trim($("#"+param[i+1]).val());
					if(v!=''&&v!=null&& v != "null")
						params+=k+"="+v+"&";
					postParams[k] = v;
				}
				timeoutId = setTimeout(function(){processAjaxRequest(id,url,postParams,divID);}, 500);
				// 处理上下键(up,down)
			} else if (keyCode == 38 || keyCode == 40) {
				$("#"+divID).hide();
				// 按下了回车键
			} else if (keyCode == 13) {
				$("#"+divID).hide();
			}
		});
	};

	/**
	 * 处理Ajax请求
	 * 
	 * @param data
	 */
	function processAjaxRequest(id,url,postParams,divID) {
		if(typeof(url) != "string"){
			//如果传入的url是数组对象时,直接把它作为数据源
			appenData(id,url,divID);
		}else{
			var T=id.substring(1,id.length);
			$("#"+divID).html("").show();
			//encodeURI
			$.post(encodeURI(url),postParams,function(data){
				// 获取数据
				var codes=[];
				var names=[];
				$.each(data,function(i,d){
					codes.push(d.CODE);
					names.push(d.NAME);
				});
				var text = [];
				$.each(names,function(i, d) {
					var word_div = $("<div id='T"+T+i+"' style='white-space:nowrap;'><span class='icon-check-empty' ></span>"+
							"<input type='hidden' value='"+codes[i]+"' name='codes' id='Tcode'"+i+">&nbsp;"+d+"</div>");
					text.push(word_div);
					word_div.click(function(e){
						// 判断复选框状态
						if($("#T"+T+i+"> span" ).hasClass("icon-check")){
							$("#T"+T+i+"> span" ).removeClass("icon-check");
							$("#T"+T+i+"> span" ).addClass("icon-check-empty");
						}else{
							$("#T"+T+i+"> span" ).removeClass("icon-check-empty");
							$("#T"+T+i+"> span" ).addClass("icon-check");
						}
					});
				});
				$("#"+divID).html(text);
			});
		}
	}
	//如果传入的url是数组对象时,直接把它作为数据源
	function appenData(id,url,divID){
		var data = url;
		var T=id.substring(1,id.length);
		$("#"+divID).html("").show();
		var codes=[];
		var names=[];
		$.each(data,function(i,d){
			codes.push(d.CODE);
			names.push(d.NAME);
		});
		var text = [];
		$.each(names,function(i, d) {
			var word_div = $("<div id='T"+T+i+"' style='white-space:nowrap;'><span class='icon-check-empty' ></span>"+
					"<input type='hidden' value='"+codes[i]+"' name='codes' id='Tcode'"+i+">&nbsp;"+d+"</div>");
			text.push(word_div);
			word_div.click(function(e){
				// 判断复选框状态
				if($("#T"+T+i+"> span" ).hasClass("icon-check")){
					$("#T"+T+i+"> span" ).removeClass("icon-check");
					$("#T"+T+i+"> span" ).addClass("icon-check-empty");
				}else{
					$("#T"+T+i+"> span" ).removeClass("icon-check-empty");
					$("#T"+T+i+"> span" ).addClass("icon-check");
				}
			});
		});
		$("#"+divID).html(text);
	}
	//end
}(window.jQuery);

